"""
创建初始数据的脚本
运行此脚本来创建基础的请假类型和部门数据
"""

import os
import sys
import django

# 设置Django环境
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'leave_approval.settings')
django.setup()

from leaves.models import LeaveType, Department
from django.contrib.auth.models import User


def create_leave_types():
    """创建请假类型"""
    leave_types = [
        {
            'name': '年假',
            'description': '带薪年假',
            'max_days': 15,
            'requires_attachment': False,
        },
        {
            'name': '病假',
            'description': '因病请假',
            'max_days': 30,
            'requires_attachment': True,
        },
        {
            'name': '事假',
            'description': '因私事请假',
            'max_days': 10,
            'requires_attachment': False,
        },
        {
            'name': '婚假',
            'description': '结婚假期',
            'max_days': 3,
            'requires_attachment': True,
        },
        {
            'name': '产假',
            'description': '产假/陪产假',
            'max_days': 98,
            'requires_attachment': True,
        },
        {
            'name': '丧假',
            'description': '直系亲属丧假',
            'max_days': 3,
            'requires_attachment': True,
        },
    ]
    
    for leave_type_data in leave_types:
        leave_type, created = LeaveType.objects.get_or_create(
            name=leave_type_data['name'],
            defaults=leave_type_data
        )
        if created:
            print(f'创建请假类型: {leave_type.name}')
        else:
            print(f'请假类型已存在: {leave_type.name}')


def create_departments():
    """创建部门"""
    departments = [
        {'name': '技术部', 'description': '负责技术开发和维护'},
        {'name': '产品部', 'description': '负责产品设计和规划'},
        {'name': '市场部', 'description': '负责市场推广和销售'},
        {'name': '人事部', 'description': '负责人力资源管理'},
        {'name': '财务部', 'description': '负责财务管理'},
        {'name': '行政部', 'description': '负责行政事务管理'},
    ]
    
    for dept_data in departments:
        department, created = Department.objects.get_or_create(
            name=dept_data['name'],
            defaults=dept_data
        )
        if created:
            print(f'创建部门: {department.name}')
        else:
            print(f'部门已存在: {department.name}')


def create_admin_user():
    """创建管理员用户"""
    if not User.objects.filter(username='admin').exists():
        admin_user = User.objects.create_superuser(
            username='admin',
            email='admin@example.com',
            password='admin123',
            first_name='系统',
            last_name='管理员'
        )
        
        # 设置用户配置
        admin_user.userprofile.role = 'admin'
        admin_user.userprofile.position = '系统管理员'
        admin_user.userprofile.department = Department.objects.filter(name='人事部').first()
        admin_user.userprofile.save()
        
        print('创建管理员用户: admin / admin123')
    else:
        print('管理员用户已存在')


def main():
    """主函数"""
    print('开始创建初始数据...')
    
    create_departments()
    create_leave_types()
    create_admin_user()
    
    print('初始数据创建完成！')
    print('\n使用说明：')
    print('1. 运行 python manage.py runserver 启动服务器')
    print('2. 访问 http://127.0.0.1:8000/admin/ 进入管理后台')
    print('3. 使用 admin / admin123 登录管理后台')
    print('4. 访问 http://127.0.0.1:8000/ 进入请假系统')


if __name__ == '__main__':
    main()
